#ifndef _POSITION_H_
#define _POSITION_H_

/**
*	Position
*	v 1.11
* 	TODO : fonctions static qui cree taille et position depuis 2 float ( Bloc::taille(float,float))
*/

#include <math.h>
#include <iostream>

/// Structure qui definit la position de tout élement
struct Position{
  float x,y;
};

/// Structure qui definit la taille de tout élement
struct Taille{
  float x,y;
};


// Version 0.1 & Anterieur
/*struct Bloc{
	Position p;
	Taille t;
};*/

// Version 0.11 & Ulterieur

class Bloc{

	public :

		/**
		 * @brief Cree un bloc de position p et taille t
		 *
		 * @param p La position du bloc
		 * @param t La taille du bloc
		 */
		Bloc( Position p, Taille t);

		/**
		 * @brief Cree un bloc de position <0,0> et taille <0,0>
		 *
		 */
		Bloc();

		/// Changer la taille du bloc
		void setTaille(Taille t);

		/// Changer la position du bloc
		void setPosition(Position p);

		/**
		 * @brief Recupere un pointeur sur la position du bloc
		 *
		 * @return Un pointeur sur la position du bloc
		 */
		Position *getPosition();

		/// Renvoie la taille du bloc
		Taille getTaille() const; 

        /// Retourne si les positions sont exactement les memes
        static bool estMemePosition(Position p1, Position p2);

        /// Retourne si les positions sont identiques avec un peu de marge
        static bool estMemePositionArrondie(Position p1, Position p2);


		/// Retourne une position depuis deux parametres x et y
		static Position creerPosition(float x, float y);

		/// Retourne une position depuis deux parametres x et y
		static Taille creerTaille(float x, float y);

        /// Retourne l'identifiant du coin le plus proche de la position recherchée
		int getNumeroCoin(Position p);

	private :

		Taille taille;

		Position position;


};

#endif
